﻿/*
 * Created by SharpDevelop.
 * User: Usuario
 * Date: 15/10/2011
 * Time: 04:27 p.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Drawing;
using System.Windows.Forms;
using Business_Entity;
using Business_Logic;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.Collections.Generic;
using System.IO;
using System.Web;
using PetSoft.GUI.Compras;

namespace PetSoft.GUI.GestRecursos
{
	/// <summary>
	/// Description of GUIPedidoAbastecimiento.
	/// </summary>
	public partial class GUIPedidoAbastecimiento : Form
	{
		int fecIni, fecFin;
		BETienda tiendaActual;
		private GUIPedidoCompra guiPC;
		private List<BELineaPedidoCompra> lstped;
		public GUIPedidoAbastecimiento(int opcion,List<BELineaPedidoCompra> lstpedcomp,GUIPedidoCompra gui){
			InitializeComponent();
			//this.pedElimBTN.Visible = false;
            this.pedNuevoBTN.Visible = false;
            //this.pedDetBTN.Visible=false;
            this.Load += new EventHandler(GUIPedidoAbastecimiento_Load);
			this.pedCodTB.KeyPress += new KeyPressEventHandler(Utils.SoloNumerosTB);
			this.pedFecFinDTP.MaxDate = DateTime.Now;
			this.pedFecIniDTP.MaxDate = DateTime.Now;
			lstped=lstpedcomp;
			guiPC=gui;
			this.tiendaActual = BLInfo.TiendaActual;
			this.CargarBTN.Visible = true;
			Tienda.Visible=true;
			Tienda.Width=90;
			pedListTBL.Columns[1].Width=100;
			pedListTBL.Columns[2].Width=100;
			pedListTBL.Columns[3].Width=80;
			this.VerBTN.Visible=false;
		}
		public GUIPedidoAbastecimiento()
		{
			//
			// The InitializeComponent() call is required for Windows Forms designer support.
			//
			InitializeComponent();
            this.pedNuevoBTN.Enabled = false;
            this.VerDetalle2BTN.Visible=false;
            for (int i=0;i<BLInfo.usuarioActual.Rol.Privilegio.Count;i++){
                if ((new BLPrivilegio()).existePrivilegio(2,"GREC","PEDP",BLInfo.UsuarioActual.Rol.Privilegio)){
                    //this.pedElimBTN.Enabled = true;
                    this.pedNuevoBTN.Enabled = true;
                        
                }                
            }
			this.Load += new EventHandler(GUIPedidoAbastecimiento_Load);
			this.pedCodTB.KeyPress += new KeyPressEventHandler(Utils.SoloNumerosTB);
			this.pedFecFinDTP.MaxDate = DateTime.Now;
			this.pedFecIniDTP.MaxDate = DateTime.Now;
			this.pedListTBL.DoubleClick += new EventHandler(doble_click);
			this.tiendaActual = BLInfo.TiendaActual;
			//
			// TODO: Add constructor code after the InitializeComponent() call.
			//
		}
		
		private void doble_click(object sender, EventArgs e){
			int aux = this.pedListTBL.CurrentRow.Index;
			if(((bool)this.pedListTBL[0, aux].Value) == true){
				this.pedListTBL[0, aux].Value = false;
			}
			else{
				this.pedListTBL[0, aux].Value = true;
			}
		}
		
		private void GUIPedidoAbastecimiento_Load(object sender, EventArgs e){
			cargaComboBoxEstado();
			//cargaTablaPedidos();
		}
		
		private void cargaComboBoxEstado(){
        	BLEstadoPedidoAbastecimiento tipo = new BLEstadoPedidoAbastecimiento();
        	this.pedTipoCB.DataSource = tipo.getAll();
        	this.pedTipoCB.ValueMember = "codigo";
        	this.pedTipoCB.DisplayMember = "descripcion";

		}
		
		private void cargaTablaPedidos(){
			BLPedidoAbastecimiento ped = new BLPedidoAbastecimiento();
			List<BEPedidoAbastecimiento> lista = new List<BEPedidoAbastecimiento>();
			lista = ped.getAllPedidos();
			if(lista!=null){
				this.pedListTBL.Rows.Clear();
				foreach (BEPedidoAbastecimiento p in lista) {
					//String[] fila = {"" + p.Codigo, "" + p.Fecha, "" + p.Estado.Descripcion};
					this.pedListTBL.Rows.Add(false, "" + p.Codigo, "" + p.Fecha, "" + p.Estado.Descripcion);
					
				}
				this.pedCantValLBL.Text = "" + lista.Count;
			}	
			else{
				MessageBox.Show("Actualmente no se tiene ningun pedido registrado.");
			}
		}
		
		void PedNuevoBTNClick(object sender, EventArgs e)
		{
			try{
            	this.tiendaActual = BLInfo.TiendaActual;
            	//MessageBox.Show("" + this.tiendaActual.Id);
            	if((this.tiendaActual==null)||(this.tiendaActual.Id==0)){
            		MessageBox.Show("No se encuentra en una tienda registrada, no se puede realizar esta operación.");
            	}
            	else{            		
					GUIPedidoProd vent = new GUIPedidoProd();
					vent.ShowDialog();
            	}
            }
            catch{
            	MessageBox.Show("No se encuentra en una tienda registrada, no se puede realizar esta operación.");
            }
		}
		
		void PedElimBTNClick(object sender, EventArgs e)
		{
			int cont = 0, contAux = 0;
        	for(int i=0; i<this.pedListTBL.RowCount;i++){
            	if((this.pedListTBL[0,i].Value!=null) && (Convert.ToBoolean(this.pedListTBL[0,i].Value) == true)){
            		cont++;
            	}            	
            }
            if(cont==0){
				MessageBox.Show("Debe seleccionar al menos un pedido para poder eliminar.");
            }
			else{
				DialogResult res = MessageBox.Show("¿Está seguro que desea eliminar los productos?", "Mensaje de Confirmación", MessageBoxButtons.YesNo);
				if(res==DialogResult.Yes){
					for(int i=0; i<this.pedListTBL.RowCount;i++){
            			if((this.pedListTBL[0,i].Value!=null) && (Convert.ToBoolean(this.pedListTBL[0,i].Value) == true)){
            				int codPed = Int32.Parse(this.pedListTBL[1,i].Value.ToString());
            				BLPedidoAbastecimiento ped = new BLPedidoAbastecimiento();
            				if (ped.eliminaPedido(codPed) == 1){
            					contAux++;
                			}
            			}            	
            		}
					if(cont == contAux){
            			if(cont==1){
                    		MessageBox.Show("El pedido fue eliminado correctamente."); 
            			}
            			else{
                    		MessageBox.Show("Los " + cont + " pedidos seleccionados fueron eliminados correctamente."); 
            			}
						cargaTablaPedidos();           		
            		}
            		else{
                    	MessageBox.Show("No se puedo eliminar " + contAux + " pedidos de los " + cont + " seleccionados.");            		
            		}
				}
				else{
				}
			}
			
		}
		
		
		void PedCancBTNClick(object sender, EventArgs e)
		{
			this.Close();
		}
		
		void EliCBCOLCheckedChanged(object sender, EventArgs e)
		{
			for(int i=0; i<this.pedListTBL.RowCount; i++){
        		this.pedListTBL[0, i].Value = this.eliCBCOL.Checked;
				//list[0, i].Value = ((CheckBox) list.Controls.Find("checkboxHeader", true)[0]).Checked;    		
        	}
		}
		
		void PedBuscarBTNClick(object sender, EventArgs e)
		{
			int codPed;
			String estPedido, fechaIni, fechaFin;
			BLPedidoAbastecimiento pedido;
			int codigoTienda = 0;
			try{
				codigoTienda = BLInfo.TiendaActual.Id;
				if((codigoTienda==null)||(codigoTienda==0)){
					MessageBox.Show("No se encuentra en una tienda registrada por lo que no tiene pedidos realizados.");
					return;
				}
			}
			catch{
				MessageBox.Show("No se encuentra en una tienda registrada por lo que no tiene pedidos realizados.");
				return;
			}
			//lee el código del pedido
			if(this.pedCodTB.Text=="")
				codPed = 0;
			else
				codPed = Int32.Parse(this.pedCodTB.Text);
			
			//lee el estado de pedido seleccionado
			if(((int)this.pedTipoCB.SelectedValue) == -1){
	        		estPedido="";
	        }
	        else
	        	estPedido = this.pedTipoCB.Text;
	        
	        //si se selecciona el checkbox de la fecha de inicio, entonces se considera en la busqueda
	        if(fecIni==1){
	        	fechaIni = String.Format("{0:dd/MM/yyyy}", DateTime.Parse(this.pedFecIniDTP.Value.ToShortDateString()));
			}
	        else
	        	fechaIni = "";
	        
	        //si se selecciona el checkbox de la fecha fin, entonces se considera en la busqueda
	        if(fecFin==1){
	        	fechaFin = String.Format("{0:dd/MM/yyyy}", DateTime.Parse(this.pedFecFinDTP.Value.ToShortDateString()));
	        }
	        else
	        	fechaFin = "";
	        
	        //se realiza la busqueda de los pedidos que cumplen con los rangos seleccionados
	        pedido = new BLPedidoAbastecimiento();
	        resBusquedaPedido(pedido.buscarPedidos(codPed, estPedido, fechaIni, fechaFin, codigoTienda));
		}
		
		private void resBusquedaPedido(List<BEPedidoAbastecimiento> lista){
			if (guiPC!=null){
				for (int i=0;i<lista.Count;i++){
					if (lista[i].Estado.Descripcion.CompareTo("SOLICITADO")!=0){
						lista.RemoveAt(i);
						i--;
					}
				}
			}
			this.pedListTBL.Rows.Clear();
			if(lista!=null){
				foreach (BEPedidoAbastecimiento ped in lista) {
					//String[] fila = {false, "" + ped.Codigo, "" + ped.Fecha.ToShortDateString(), "" + ped.Estado.Descripcion};
					this.pedListTBL.Rows.Add(false, "" + ped.Codigo, "" + ped.Fecha.ToShortDateString(), "" + ped.Estado.Descripcion);
					if (guiPC!=null){
						int col=pedListTBL.Rows.Count;
						pedListTBL[4,col-1].Value=ped.Tienda.Nombre;
					}
				}
				this.pedCantValLBL.Text = "" + lista.Count;
				//if(lista.Count==0){
				//	MessageBox.Show("No se encontraron resultados con esos filtros.");
				//}
			}
			else{	
				MessageBox.Show("Hubo un error al hacer la búsqueda.");
			}
		}
		
		void PedFIniCBCheckedChanged(object sender, EventArgs e)
		{
			if(this.pedFIniCB.Checked==true){
				fecIni = 1;				
				this.pedFecIniDTP.Enabled = true;
			}
			else{
				fecIni = 0;
				this.pedFecIniDTP.Enabled = false;
			}
		}
		
		void PedFFinCBCheckedChanged(object sender, EventArgs e)
		{
			if(this.pedFFinCB.Checked==true){
				fecFin = 1;				
				this.pedFecFinDTP.Enabled = true;
			}
			else{
				fecFin = 0;
				this.pedFecFinDTP.Enabled = false;
			}
		}
		
		void PedLimpiarBTNClick(object sender, EventArgs e)
		{
			this.pedCodTB.Text = "";
			this.pedFecIniDTP.Value = DateTime.Parse(DateTime.Now.ToShortDateString());
			this.pedFecFinDTP.Value = DateTime.Parse(DateTime.Now.ToShortDateString());
			this.pedTipoCB.SelectedValue = -1;
			this.pedListTBL.Rows.Clear();
			this.pedFFinCB.Checked = false;
			this.pedFIniCB.Checked = false;
			this.pedCantValLBL.Text = "0";
		}
			
			
		void VerBTNClick(object sender, EventArgs e)
		{
			int cont=0, index=0, contAux=0;
			String estPed="";
			BLPedidoAbastecimiento blped = new BLPedidoAbastecimiento();
			List<BELineaPedidoAbastecimiento> detallePed = new List<BELineaPedidoAbastecimiento>();
			List<BELineaPedidoAbastecimiento> detallePedFinal = new List<BELineaPedidoAbastecimiento>();
						
			foreach (DataGridViewRow fila in this.pedListTBL.Rows) {
				if(fila.Cells[0].Value != null && (bool)fila.Cells[0].Value){
        			index = contAux;
        			cont++;
        			estPed = fila.Cells[3].Value.ToString();
        		}      		
        		contAux++;
			}
			//se obtiene el código del pedido seleccionado
			if(cont==0){
				Utils.MessageAviso("Debe seleccionar algún pedido para mostrar los detalles");
			}
			if(cont>1){
				Utils.MessageAviso("Debe seleccionar solo 1 pedido para mostrar los detalles");
			}
			if(cont==1){
			    int aux = Int32.Parse(this.pedListTBL[1, index].Value.ToString());
			    BEPedidoAbastecimiento ped = blped.getPedidoByCod(aux);
			    GUIDetallesPedAbast detallePedido = new GUIDetallesPedAbast(ped, estPed);
			    detallePedido.ShowDialog();
			}
		}
		
		void CargarBTNClick(object sender, EventArgs e)
		{
			BLPedidoAbastecimiento blped=new BLPedidoAbastecimiento();
			List<BELineaPedidoAbastecimiento> lstAuxiliar=new List<BELineaPedidoAbastecimiento>();
			bool condicion=false; bool cond=false;
			for (int i=0;i<pedListTBL.Rows.Count;i++){
				condicion=bool.Parse(pedListTBL[0,i].Value.ToString());
				cond=cond || condicion;
				if (condicion){
					int cod=int.Parse(pedListTBL[1,i].Value.ToString());
					List<BELineaPedidoAbastecimiento> lstpedabast=blped.getDetalleByCodigo(cod);
					lstAuxiliar.AddRange(lstpedabast);
				}
			}
			if (cond){
				BELineaPedidoCompra beped=null;
				for (int j=0;j<lstAuxiliar.Count;j++){
					beped=new BELineaPedidoCompra();
					beped.ProductoProveedor.Producto.Codigo=lstAuxiliar[j].Producto.Codigo;
					beped.ProductoProveedor.Producto.Nombre=lstAuxiliar[j].Producto.Nombre;
					beped.ProductoProveedor.Producto.Descripcion=lstAuxiliar[j].Producto.Descripcion;
					beped.ProductoProveedor.Producto.TipoProducto.Descripcion=lstAuxiliar[j].Producto.TipoProducto.Descripcion;
					beped.Estado='N';
					beped.CantidadSolicitada=lstAuxiliar[j].Cantidad;
					lstped.Add(beped);
				}
				guiPC.CargarPedidoCompra(lstped);
				this.Close();
			}
			else{
				Utils.MessageAviso("Debe de seleccionar al menos una opcion");
			}
			
		}
		
		void VerDetalle2BTNClick(object sender, EventArgs e)
		{
			try{
				int fila=-1; int cont=0;
				for (int i=0;i<pedListTBL.Rows.Count;i++){
					if ((bool)pedListTBL[0,i].Value){
						cont++;
						if (cont==1){
							fila=i;
						}
					}
				}
				if (fila!=-1){
					if (cont<=1){
						int codigo=int.Parse(pedListTBL[1,fila].Value.ToString());
						GUIListaLineaPedidoCompra guillpc=new GUIListaLineaPedidoCompra(codigo);
						guillpc.ShowDialog(this);
					}
					else{
						Utils.MessageAviso("Solo se puede seleccionar una Orden de Abastecimiento");
					}
				}
				else{
					Utils.MessageAviso("Se debe de ingresar una columna");
				}
			
			}catch(Exception ex){
				Utils.MessageError("",ex);
			}
		}
	}
}
